package com.atguigu08._interface.apply;

/**
 * ClassName: USBTest
 * Package: com.atguigu06._final.apply
 * Description:
 *
 * @Author ZY
 * @Create 16:49
 * @Version 1.0
 */
public class USBTest {
    public static void main(String[] args) {

        Computer computer = new Computer();

        //“匿名”指的是不显式命名的类或对象，直接在代码中临时定义和使用。

        //1.创建 接口实现类 的 对象
        Printer printer = new Printer();
        computer.transferData(printer);
        System.out.println();
//        步骤：
//          定义Printer类并实现USB接口。
//          显式创建Printer类的实例printer。
//          将printer对象作为参数传递给方法。


        //2.创建 接口实现类 的 匿名对象--无变量名引用直接直接作为参数传递即为匿名对象
        computer.transferData(new Camera()); // 直接传递new Camera()，不赋值给变量
        System.out.println();
//        步骤：
//        定义Camera类并实现USB接口。
//        直接通过new Camera()创建对象，但不赋值给变量。
//        直接将匿名对象传递给方法。


        //3.创建 接口匿名实现类(匿名内部类) 的 对象--无类名直接在代码中实现接口或继承类即为匿名实现类
        // 匿名内部类的具名对象
        USB usb1 = new USB(){// 没有显式定义实现类(类名)，直接实现接口方法
            public void start(){
                System.out.println("U盘开始工作");
            }
            public void stop(){
                System.out.println("U盘结束工作");
            }
        };
        computer.transferData(usb1);
        System.out.println();
//        步骤：
//        使用匿名内部类（new USB() { ... }）直接实现接口。
//        将匿名内部类的实例赋值给变量usb1。
//        通过变量usb1调用方法。


        //4.创建 接口匿名实现类(匿名内部类) 的 匿名对象
        //匿名内部类的匿名对象
        computer.transferData(new USB(){// 不命名类，也不命名对象
            public void start(){
                System.out.println("扫描仪开始工作");
            }
            public void stop(){
                System.out.println("扫描仪结束工作");
            }
        });
//        步骤：
//        使用匿名内部类实现接口，并直接作为参数传递。
//        既不定义实现类，也不给对象命名。

    }
}

class Computer{

    public void transferData(USB usb){
        System.out.println("设备连接成功。。。");
        usb.start();
        System.out.println("数据传输中。。。");
        usb.stop();
    }
}

class Camera implements USB{ //实现类Camera

    @Override
    public void start() {
        System.out.println("照相机开始工作");
    }

    @Override
    public void stop() {
        System.out.println("照相机结束工作");
    }
}

class Printer implements USB{ //实现类Printer

    @Override
    public void start() {
        System.out.println("打印机开始工作。。。");
    }

    @Override
    public void stop() {
        System.out.println("打印机结束工作。。。");
    }
}

interface USB{
    //声明常量
    //USB的长、宽、高....

    //方法---public abstract可省略
    public abstract void start();
    void stop();


}
